উদাহরণ সহ Method-Level Security কনফিগারেশন

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Method-Level Security
140

Spring Security তে Method-Level Security হল এমন একটি প্রক্রিয়া যার মাধ্যমে আপনি মেথড লেভেলে নিরাপত্তা কনফিগার করতে পারেন। এটি আপনাকে নির্দিষ্ট মেথডে কোন রোল বা পারমিশন অ্যাসাইন করতে সাহায্য করে। Spring Security এর Method-Level Security কনফিগারেশন দুইটি প্রধান পদ্ধতিতে করা যায়:

  1. @PreAuthorize: মেথডের উপরে এনোটেশন ব্যবহার করে অ্যাক্সেস নিয়ন্ত্রণ।
  2. @Secured: নির্দিষ্ট রোল বা অথোরাইজেশন চেকের জন্য ব্যবহৃত হয়।
  3. @RolesAllowed: স্পেসিফিক রোলের জন্য মেথড অ্যাক্সেস কন্ট্রোল করে।

এছাড়াও, @EnableGlobalMethodSecurity এনোটেশন দিয়ে Method-level security চালু করতে হয়।


ধাপ ১: Method-Level Security চালু করা

@EnableGlobalMethodSecurity এনোটেশন ব্যবহার করে Method-Level Security সক্রিয় করতে হয়। এটি আপনার Spring Security কনফিগারেশন ক্লাসে যুক্ত করতে হবে।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig {
    // Method-level security এখানে কনফিগার করা হবে
}

এখানে prePostEnabled = true, securedEnabled = true, এবং jsr250Enabled = true ব্যবহার করা হয়েছে। এই প্যারামিটারগুলি method-level security এর জন্য বিভিন্ন বৈশিষ্ট্য সক্ষম করে।

  • prePostEnabled: @PreAuthorize এবং @PostAuthorize এনোটেশনগুলির জন্য সক্রিয় করা হয়।
  • securedEnabled: @Secured এনোটেশন সমর্থন করতে সক্ষম করা হয়।
  • jsr250Enabled: @RolesAllowed এনোটেশন সমর্থন করতে সক্ষম করা হয়।

ধাপ ২: Method-Level Security কনফিগারেশন উদাহরণ

এখন, Method-Level Security কনফিগার করতে আমরা বিভিন্ন এনোটেশন ব্যবহার করব:


1. @PreAuthorize (Pre Authorization)

@PreAuthorize এনোটেশন ব্যবহার করে আমরা নির্দিষ্ট শর্তে অ্যাক্সেস অনুমোদন বা প্রত্যাখ্যান করতে পারি। এই এনোটেশনটি স্প্রিং এলএক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) ব্যবহার করে কন্ডিশন চেক করতে দেয়।

উদাহরণ:
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @PreAuthorize("hasRole('ADMIN')")
    public void createUser() {
        System.out.println("User created");
    }

    @PreAuthorize("hasRole('USER')")
    public void viewUser() {
        System.out.println("User details viewed");
    }

    @PreAuthorize("hasRole('USER') and #userId == authentication.principal.id")
    public void updateUser(Long userId) {
        System.out.println("User updated");
    }
}

এখানে:

  • createUser() মেথড শুধুমাত্র ADMIN রোল দ্বারা অ্যাক্সেস করা যাবে।
  • viewUser() মেথড শুধুমাত্র USER রোল দ্বারা অ্যাক্সেস করা যাবে।
  • updateUser(Long userId) মেথডে এটি যাচাই করা হয় যে, ব্যবহারকারী যে userId পাস করবে তা ঐ ব্যবহারকারীর নিজের আইডি।

2. @Secured (Role-Based Security)

@Secured এনোটেশন ব্যবহার করে আমরা মেথড লেভেলে রোল-ভিত্তিক নিরাপত্তা নিশ্চিত করতে পারি। এটি সাধারণত রোল নামের তালিকা গ্রহণ করে।

উদাহরণ:
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Secured("ROLE_ADMIN")
    public void deleteProduct() {
        System.out.println("Product deleted");
    }

    @Secured({"ROLE_ADMIN", "ROLE_USER"})
    public void viewProduct() {
        System.out.println("Product viewed");
    }
}

এখানে:

  • deleteProduct() মেথড শুধুমাত্র ROLE_ADMIN রোল দ্বারা অ্যাক্সেস করা যাবে।
  • viewProduct() মেথড ROLE_ADMIN এবং ROLE_USER উভয় রোল দ্বারা অ্যাক্সেস করা যাবে।

3. @RolesAllowed (JSR-250 Standard)

@RolesAllowed এনোটেশনটি JSR-250 স্ট্যান্ডার্ড অনুসরণ করে এবং ব্যবহারকারীর রোলের ভিত্তিতে মেথড অ্যাক্সেস নিয়ন্ত্রণ করে।

উদাহরণ:
import javax.annotation.security.RolesAllowed;
import org.springframework.stereotype.Service;

@Service
public class OrderService {

    @RolesAllowed("ADMIN")
    public void cancelOrder() {
        System.out.println("Order cancelled");
    }

    @RolesAllowed({"USER", "ADMIN"})
    public void placeOrder() {
        System.out.println("Order placed");
    }
}

এখানে:

  • cancelOrder() মেথড শুধুমাত্র ADMIN রোল দ্বারা অ্যাক্সেস করা যাবে।
  • placeOrder() মেথড USER অথবা ADMIN রোল দ্বারা অ্যাক্সেস করা যাবে।

ধাপ ৩: Method-Level Security কনফিগারেশন ও টেস্ট

এখন, যেহেতু আমরা মেথড-লেভেল নিরাপত্তা কনফিগার করেছি, চলুন একটি উদাহরণ তৈরি করি যেখানে আমরা UserService এবং ProductService এর মেথডগুলো অ্যাক্সেস করার জন্য রোল যাচাই করি।

উদাহরণ:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SecurityTestController {

    @Autowired
    private UserService userService;

    @Autowired
    private ProductService productService;

    @GetMapping("/createUser")
    public String createUser() {
        userService.createUser(); // This should be accessible only by ADMIN
        return "User created";
    }

    @GetMapping("/viewUser")
    public String viewUser() {
        userService.viewUser(); // This should be accessible only by USER
        return "User details viewed";
    }

    @GetMapping("/deleteProduct")
    public String deleteProduct() {
        productService.deleteProduct(); // This should be accessible only by ADMIN
        return "Product deleted";
    }

    @GetMapping("/placeOrder")
    public String placeOrder() {
        productService.placeOrder(); // This should be accessible by both USER and ADMIN
        return "Order placed";
    }
}

এখন, এই API গুলোটি ব্যবহারকারী যখন কল করবে, তখন শুধুমাত্র নির্দিষ্ট রোলের ব্যবহারকারীই সেই মেথডগুলো অ্যাক্সেস করতে পারবে।


উপসংহার

Method-Level Security Spring Security-তে নিরাপত্তার একটি শক্তিশালী উপাদান যা আপনাকে মেথডের স্তরে নিরাপত্তা কনফিগার করার সুবিধা দেয়। @PreAuthorize, @Secured, এবং @RolesAllowed এনোটেশনগুলি আপনাকে নির্দিষ্ট রোল বা শর্ত অনুযায়ী মেথড অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়ক। Spring Security এ এই কনফিগারেশন অত্যন্ত কাস্টমাইজযোগ্য এবং সহজে পরিচালনা করা যায়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...